/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.servicoimpl;

import br.com.deployment.entidade.humana.Pessoa;
import br.com.deployment.entidade.registroimovel.Imovel;
import br.com.deployment.entidade.registroimovel.Transferencia;
import br.com.deployment.interfaces.TransferenciaDaoIn;
import br.com.deployment.servico.ImovelServico;
import br.com.deployment.servico.TituloServico;
import br.com.deployment.servico.TransferenciaServico;
import br.com.deployment.servico.UsuarioServico;
import br.com.deployment.utilitario.Msg;
import br.com.deployment.utilitario.Sexo;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.NonUniqueResultException;

/**
 *
 * @author roniere
 */
@Stateless
@LocalBean
public class TransferenciaServicoImpl implements TransferenciaServico {

    @EJB
    TransferenciaDaoIn transferenciaDao;
    @EJB
    UsuarioServico usuarioServico;
    @EJB
    ImovelServico imovelServico;
    @EJB
    TituloServico tituloServico;

    @Override
    public void create(Transferencia transferir) {
        transferenciaDao.save(transferir);
    }

    @Override
    public void edit(Transferencia transferir) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void remove(Transferencia transferir) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public Transferencia find(int id) {
        return transferenciaDao.find(id);
    }

    @Override
    public Transferencia verificaUltimaTrans(int idImovel) {
        return transferenciaDao.verificaUltimaTrans(idImovel);
    }

    @Override
    public Transferencia verificaPrimeiraTrans(int idImovel) {
        return transferenciaDao.verificaPrimeiraTrans(idImovel);
    }

    @Override
    public List<Transferencia> findAll() {
        return transferenciaDao.findAll();
    }

    @Override
    public List<Transferencia> findTransferir(Transferencia transferir) {
        return transferenciaDao.findTransferir(transferir);
    }

    @Override
    public List<Transferencia> findTransImovel(Imovel imovel, Pessoa pessoaAdquirente, Pessoa pessoaTransmitente, Boolean anterior) {
        return transferenciaDao.findTransImovel(imovel, pessoaAdquirente, pessoaTransmitente, anterior);
    }

    @Override
    public List<Transferencia> findImovelAll(Imovel imovel, String str) {
        return transferenciaDao.findImovelAll(imovel, str);
    }

    @Override
    public void transferir(Imovel imovel, Transferencia transferencia) {

        if (imovel != null) {
            if (tituloServico.find(transferencia.getTitulo().getId()) != null) {

                transferencia.setUsuario(usuarioServico.getUsuario());
                transferencia.setImovel(imovelServico.findTransf(imovel));
                transferencia.setDataCadastro(new Date());
                transferencia.setTitulo(transferencia.getTitulo());
                transferencia.setTexto(geraTextoTransferencia(transferencia));
                transferenciaDao.save(transferencia);
                transferencia = new Transferencia();
            } else {
                Msg.messagemError("O imóvel deve ter Titulo");
            }
        }
    }

    @Override
    public void transfImovel(Imovel imovel, Transferencia transferenciaImovel) {
        System.err.println("----"+imovel);
        transferenciaImovel.setUsuario(usuarioServico.getUsuario());

        if (imovel != null) {
            
            try {
                transferenciaImovel.setImovel(imovelServico.findTransf(imovel));
            } catch (NonUniqueResultException n) {
                Msg.messagemError("Já existe um imóvel com o registro" + imovel.getRegistro());
                return;
            }
            
            transferenciaImovel.setDataCadastro(new Date());
            
            if (transferenciaImovel.getAdquirente() != null) {
                transferenciaImovel.setTitulo(tituloServico.find(transferenciaImovel.getTitulo().getId()));
                transferenciaImovel.setTexto(geraTextoTransferencia(transferenciaImovel));
                transferenciaDao.save(transferenciaImovel);
                Msg.messagemInfo("Transferência Realizada !");
                return;
            } else {
                Msg.messagemError("A transferência deve conter um ou mais adquirentes!");
                return;
            }

        }
    }

    public String geraTextoTransferencia(Transferencia transTexto) {
        System.err.println("---GERANDO TEXTO--");
        String[] registro = transTexto.getImovel().getRegistro().toString().split("-");

        String texto = "";
        texto += "R#numero/" + registro[0] + "";
        if (transTexto.getTransmitente() != null) {
            System.err.println("---GERANDO TRANSMITENTE--");
            texto += " - <b>TRANSMITENTE:</b>";

            for (Pessoa pessoa1 : transTexto.getTransmitente()) {
                System.err.println("---FOR TRANSMITENTE--");
                texto += pessoa1.getNome() + ", "
                        + (pessoa1.getEndereco().getPais() == null ? "" : pessoa1.getEndereco().getPais().equalsIgnoreCase("Brasil") ? (pessoa1.getSexo() == Sexo.Masculino ? "Brasileiro" : "Brasileira") : "")
                        + (pessoa1.getEstadocivil() == null ? "" : ", " + pessoa1.getEstadocivil().toString())
                        + (pessoa1.getProfissao() == null ? "" : ", " + pessoa1.getProfissao().toString())
                        + ", residente e domiciliado ";
                System.err.println("---GERANDO LOGRADOURO TRANSMITENTE--");
                texto += pessoa1.getEndereco().getTipo_logradouro().toString().toLowerCase()
                        + " " + (pessoa1.getEndereco().getLogradouro() == null ? " " : " " + pessoa1.getEndereco().getLogradouro())
                        + "" + (pessoa1.getEndereco().getBairro() == null ? " " : ", Bairro " + pessoa1.getEndereco().getBairro())
                        + ", " + (pessoa1.getEndereco().getCidade().getNom_cidade() == null ? "" : " " + pessoa1.getEndereco().getCidade().getNom_cidade())
                        + ", " + (pessoa1.getEndereco().getEstado().getNom_estado() == null ? "" : "" + pessoa1.getEndereco().getEstado().getNom_estado()) + "";
                System.err.println("---GERANDO DADOS TRANSMITENTE / CPF--");
                texto += ", portador do CPF nº "
                        + pessoa1.getCpf() == null ? "" : pessoa1.getCpf();
                texto += pessoa1.getRg() != null ? "e do RG nº " + pessoa1.getRg() : "";
            }
            texto += ";<b> ADQUIRENTE: </b>";
        } else {
            texto += ";<b> PROPRIETÁRIO: </b>";
        }
        if (transTexto.getAdquirente() != null) {
            for (Pessoa pessoa1 : transTexto.getAdquirente()) {
                System.err.println("---GERANDO  ADQUIRENTE--");
                texto += pessoa1.getNome() + ", "
                        + (pessoa1.getEndereco().getPais() == null ? "" : pessoa1.getEndereco().getPais().equalsIgnoreCase("Brasil") ? (pessoa1.getSexo() == Sexo.Masculino ? "Brasileiro" : "Brasileira") : "")
                        + ", " + (pessoa1.getEstadocivil() == null ? "" : ", " + pessoa1.getEstadocivil().toString())
                        + ", " + (pessoa1.getProfissao() == null ? "" : ", " + pessoa1.getEstadocivil().toString()) + ","
                        + " residente e domiciliado ";
                System.err.println("---GERANDO ENDERECO--");
                texto += pessoa1.getEndereco().getTipo_logradouro().toString().toLowerCase()
                        + " " + (pessoa1.getEndereco().getLogradouro() == null ? " " : " " + pessoa1.getEndereco().getLogradouro())
                        + "" + (pessoa1.getEndereco().getBairro() == null ? " " : ", Bairro " + pessoa1.getEndereco().getBairro())
                        + ", " + (pessoa1.getEndereco().getCidade().getNom_cidade() == null ? "" : " " + pessoa1.getEndereco().getCidade().getNom_cidade())
                        + ", " + (pessoa1.getEndereco().getEstado().getNom_estado() == null ? "" : "" + pessoa1.getEndereco().getEstado().getNom_estado()) + "";

                System.err.println("---GERANDO CPF ADQUIRENTE--");
                texto += ", portador do CPF nº" + pessoa1.getCpf();
                texto += pessoa1.getRg() != null ? "e do RG nº " + pessoa1.getRg() : "";
            }
        }
        if (tituloServico.find(transTexto.getTitulo().getId()) != null) {
            System.err.println("---GERANDO TITULO--");
            texto += ";<b> TÍTULO:</b>" + tituloServico.find(transTexto.getTitulo().getId()).getNome() + "";

            texto += "" + transTexto.getFormaTitulo()
                    == null ? "" : ";<b> FORMA DO TÍTULO: </b>" + transTexto.getFormaTitulo();
        }
        texto += ". O REFERIDO É VERDADE, DOU FÉ./..-.-.-.-.-.-.-.-.-.-";
        System.err.println("---FINALIZOU--");
        return texto;
    }
}
